﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAOEmpresa : DAO
    {
        //Atributos de manejo de instancia (singleton)
        static DAOEmpresa instance = null;  
        // Atributos para acceso a los DataSet Tipados
        private DataSetConsultora.EmpresaDataTable empresasTabla = new DataSetConsultora.EmpresaDataTable();
        private EmpresaTableAdapter empresaTableAdapter = new EmpresaTableAdapter();

        public static DAOEmpresa Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAOEmpresa();
                        }
                    }
                }
                return instance;
            }
        }

        public DAOEmpresa(){                    
        }


        public Empresa guardar(Empresa unEmpresa)
        {
            // Inserto la empresa en la db por medio de su table adapter correspondiente
            empresaTableAdapter.insert(unEmpresa._nombre, unEmpresa._descripcion);
            
            // Finalmente retorno la emrpesa insertada
            return recolectarUno();
        }
        
        public List<Empresa> cargar(){

            // Cargo los Empresa de la db
            empresasTabla = empresaTableAdapter.GetData();

            // Creo la lista para recolectar y devolver las Empresas cargadas de la db
            List<Empresa> empresasCargadas = new List<Empresa>();
                                   
            
            // Recorro los Empresas de la tabla
            foreach (DataSetConsultora.EmpresaRow unEmpresaFila in empresasTabla){
                
                // Creo una Empresa y la agrego a la lista de Empresas cargadas
                empresasCargadas.Add(new Empresa(unEmpresaFila.id,  
                                                 unEmpresaFila.nombre, 
                                                 unEmpresaFila.descripcion
                                             )
                                    );
                                          
            }
            
            // Finalmente devuelvo la lista de EmpresasCargadas            
            return empresasCargadas;
        }

        public Empresa cargar(Int32 unId) {

            // obtengo la empresa por id en empresaTabla
            empresasTabla = empresaTableAdapter.ConsultarPor(unId);

            // Finalmente retorno un nuevo objeto Empresa mapeado de la tabla
            return recolectarUno();         
            
                        
        }

        private Empresa recolectarUno()
        {
            return new Empresa(empresasTabla[0].id,
                               empresasTabla[0].nombre,
                               empresasTabla[0].descripcion);
        }

    }

}
